/**
 * @Project : algorithm-learning
 * @Author : Ruoyu Wang
 * @User : Momenta
 * @DateTime : 2024/3/24 15:54
 */

//这里有n个正整数a1,...,an
//Alice会先去掉其中最多d个数
//Bob接下来会将剩余的数中最多m个数乘以-k
//Alice想要剩余数之和尽可能大，Bob想要剩余数之和尽可能小。
//假设Alice和Bob都足够聪明，请问最后剩余数之和是多少。
//
//输入描述
//  第一行一个正整数T，接下来有T组数据
//  每组数据2行
//  第一行4个数n,m,k,d(2≤n≤10^5)(0≤m,d≤n)(1≤k≤10^4)
//  第二行n个数，a1,a2,...,an(1≤ai≤10^9)
// 保证\sumn不超过10^5
//输出描述
//  每组数据输出一行，每行一个数，表示剩余数之和
//
//示例1
//输入
//1
//3 1 1 1
//4 1 1
//输出
//0
//说明
//  Alice会去掉4，此时剩余数为[1,1]
//  Bob会把一个1变为-1，此时剩余数为[-1,1]，和为0
//
//示例2
//输入
//1
//3 1 1 1
//4 3 2
//输出
//1
//说明
//  Alice不会去掉任何数
//  Bob会把4变为-4，此时剩余数为[-4,3,2]，和为1
//
//示例3
//输入
//2
//5 4 2 0
//3 5 1 4 1
//10 4 1 6
//1 8 2 9 3 3 4 5 3 200
//输出
//-25
//-9

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int t;
    scanf("%d", &t);
    while (t--) {
        int n, m, k, d;
        scanf("%d%d%d%d", &n, &m, &k, &d);
        int a[n];
        for (int i = 0; i < n; i++) {
            scanf("%d", &a[i]);
        }
        sort(a, a + n);
        if (n - d > m) {

        }
        long long sum = 0;
        for (int i = n - m; i < n; ++i) {
            sum += a[i];
        }
        printf("%lld");
    }
    return 0;
}